home *** CD-ROM | disk | FTP | other *** search
- unit BLObRdU;
-
- interface
-
- uses
- Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Buttons, StdCtrls, Db, DBTables;
-
- type
- TForm1 = class(TForm)
- tblBioLife: TTable;
- fldCommonName: TStringField;
- fldNotes: TMemoField;
- edtCommonName: TEdit;
- memNotes: TMemo;
- Label1: TLabel;
- Label2: TLabel;
- btnPrior: TSpeedButton;
- btnNext: TSpeedButton;
- procedure FormCreate(Sender: TObject);
- procedure btnPriorClick(Sender: TObject);
- procedure btnNextClick(Sender: TObject);
- procedure FieldChange(Sender: TObject);
- private
- FieldChanged: Boolean;
- public
- procedure UpdateTableFromUI;
- procedure UpdateUIFromTable;
- procedure MoveRecord(MoveBy: Integer);
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- {$R *.DFM}
-
- procedure TForm1.UpdateTableFromUI;
- var
- Stream: TStream;
- begin
- try
- tblBioLife.Edit;
- { Save edit control into string field }
- fldCommonName.AsString := edtCommonName.Text;
- Stream := TBlobStream.Create(fldNotes, bmWrite);
- try
- { Save memo control into BLOb field }
- memNotes.Lines.SaveToStream(Stream)
- finally
- Stream.Free
- end;
- tblBioLife.Post
- except
- tblBioLife.Cancel
- end
- end;
-
- procedure TForm1.UpdateUIFromTable;
- var
- Stream: TStream;
- begin
- { Disable buttons as appropriate }
- btnPrior.Enabled := not tblBioLife.Bof;
- btnNext.Enabled := not tblBioLife.Eof;
- { Load edit control from string field }
- edtCommonName.Text := fldCommonName.AsString;
- Stream := TBlobStream.Create(fldNotes, bmRead);
- try
- { Load BLOb field into memo control }
- memNotes.Lines.LoadFromStream(Stream);
- finally
- Stream.Free
- end;
- { Reset change detector }
- FieldChanged := False
- end;
-
- procedure TForm1.MoveRecord(MoveBy: Integer);
- begin
- { If change made, ask if it should be saved }
- if FieldChanged and
- (MessageDlg('Record has changed. Update table?', mtConfirmation,
- [mbYes, mbNo], 0) = mrYes) then
- UpdateTableFromUI;
- { Go to requested record }
- tblBioLife.MoveBy(MoveBy);
- { Refresh UI }
- UpdateUIFromTable
- end;
-
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- tblBioLife.Open;
- UpdateUIFromTable
- end;
-
- procedure TForm1.btnPriorClick(Sender: TObject);
- begin
- MoveRecord(-1)
- end;
-
- procedure TForm1.btnNextClick(Sender: TObject);
- begin
- MoveRecord(1)
- end;
-
- { Event handler shared by edit's and memo's OnChange events }
- procedure TForm1.FieldChange(Sender: TObject);
- begin
- { When edit/memo is changed, set change detector }
- FieldChanged := True
- end;
-
- end.
-